home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 4 / Info_Mac IV CD-ROM (Pacific HiTech Inc.)(August 1994).iso / Science / µSim 1.0b4 Folder / Exercise.asm < prev    next >
Assembly Source File  |  1994-01-05  |  2KB  |  141 lines

  1. ;test program manually compiled from C
  2.  
  3. ;i    EQU    -2
  4. ;k    EQU    -1
  5.  
  6. ;main()
  7. ;{
  8. ;int i,k;
  9. ;int v[16];
  10. main    LINK    #-19
  11. ;for (i=0; i<16; i++) v[i]=i;
  12.     MOVQ    #16
  13.     INSP    #16    ;SP after array end
  14. ciclo1    DEAC    #1
  15.     PUSH
  16.     JNZE    ciclo1
  17. ;for (i=0; i<16; i++) v[i]=i+v[i]*v[i];
  18. ;    MOVQ    #0    AC is already zeroed
  19.     STOL    #-2    ;i
  20.     SWBP
  21.     PUSH        ;save locals BP
  22.     DEAC    #19    ;AC points at the array beginning
  23.     SWBP        ;temporarily put it in BP
  24.     POP        ;the locals BP
  25.     SWBP        ;stuff back into BP
  26.     STOL    #-3    ;stored
  27. ciclo2    LODL    #-3    ;take v
  28.     ADDL    #-2    ;find v[i]
  29. ;    DESP    #1    ;reserve space for result
  30.     PSHI
  31.     PSHI
  32.     CALL    mult
  33. ;    POP
  34.     ADDL    #-2    ;add i to the square
  35.     PUSH        ;save it
  36.     LODL    #-3    ;take v
  37.     ADDL    #-2    ;find v[i]
  38.     POPI        ;put into v[i]
  39.     MOVQ    #1
  40.     ADDL    #-2    ;i
  41.     STOL    #-2    ;increment i
  42.     DEAC    #16
  43.     JNZE    ciclo2
  44. ;k = sum(v,16);
  45. ;    MOVQ    #0
  46.     STOL    #-2    ;i
  47.     LODL    #-3    ;v
  48. ;    DESP    #1    ;reserve space for result
  49.     PUSH        ;v
  50.     MOVQ    #16
  51.     PUSH        ;size
  52.     CALL    sum
  53. ;    POP
  54.     STOL    #-1    ;k
  55.     MOVQ    #69
  56.     CALL    output
  57.     MOVQ    #110
  58.     CALL    output
  59.     MOVQ    #100
  60.     CALL    output
  61.     MOVQ    #13
  62.     CALL    output
  63. ;example input: waiting for a carriage return
  64. ;waitcr    CALL    input
  65. ;    DEAC    #13
  66. ;    JNZE    waitcr
  67.     MOVQ    #79
  68.     CALL    output
  69.     MOVQ    #75
  70.     CALL    output
  71.     MOVQ    #13
  72.     CALL    output
  73.     RETN    #0
  74. ;}
  75.  
  76. ;int sum(int *vect, int size)
  77. ;{
  78. ;int i,k=0;
  79. sum    LINK    #-2
  80. ;for(i=0; i<size; i++) k=k+vect[i];
  81.     MOVQ    #0
  82.     STOL    #-2    ;i
  83.     STOL    #-1    ;k, forgotten?
  84. loops    LODL    #3    ;&v
  85.     ADDL    #-2    ;address of v[i]
  86.     PSHI
  87.     POP        ;value of v[i]
  88.     ADDL    #-1    ;k
  89.     STOL    #-1    ;k
  90.     MOVQ    #1
  91.     ADDL    #-2    ;i
  92.     STOL    #-2    ;i
  93.     SUBL    #2    ;size (ac-=size)
  94.     JNZE    loops
  95.     LODL    #-1    ;k
  96. ;    STOL    #4    ;return k
  97.     RETN    #2
  98. ;}
  99.  
  100. ;int mult(int a, int b)
  101. ;{
  102. mult    LINK    #-1
  103.     MOVQ    #0
  104.     STOL    #-1    ;zero out result
  105.     LODL    #2
  106.     JZER    zero    ;if one is zero, exit immediately
  107. retry    ANDI    #1    ;check if we can shift
  108.     JNZE    loopm    ;jump if we cannot
  109.     LODL    #3
  110.     LSL1
  111.     STOL    #3
  112.     LODL    #2
  113.     ASRA
  114.     STOL    #2
  115.     JUMP    retry
  116. loopm    LODL    #3
  117.     ADDL    #-1
  118.     STOL    #-1
  119.     LODL    #2
  120.     DEAC    #1
  121.     STOL    #2
  122.     JNZE    loopm
  123.     LODL    #-1
  124. zero    RETN    #2
  125. ;}
  126.  
  127. input    LODD    #-2
  128.     JZER    input    ;wait for input
  129.     PUSH
  130.     MOVQ    #0
  131.     STOD    #-2    ;input acknowledged, zero loc
  132.     POP
  133.     RTS    #0
  134.  
  135. output    PUSH        ;save character to output
  136. loop    LODD    #-1
  137.     JNZE    loop    ;wait for acknowledge of previous char
  138.     POP        ;get back the char
  139.     STOD    #-1    ;put it onto memory mapped output loc
  140.     RTS    #0
  141.